import { permissionRoutes } from '../routes'

// 转换所有路由的结构，以方便后续生成前端角色路由
// 转换数组结构为对象结构
const exangeRoutesStruct = routes => {
  return routes.reduce((result, curr) => {
    result[curr.path] = curr
    if (curr.children) {
      result[curr.path].childRoutes = exangeRoutesStruct(curr.children)
    }
    return result
  }, {})
}

const routes = exangeRoutesStruct(permissionRoutes)

// 根据不同角色后端返回的菜单项，生成所能访问的路由数据
// menus：是后端返回的用户菜单数据
// parent：是前端维护的路由数据（由上述exangeRoutesStruct()转换结构后的数据）
export const generateAccessRoutes = (menus, parent = routes) => {
  return menus.reduce((result, curr) => {
    // now 表示当前路由对象
    const now = {...parent[curr.url]}
    // 如果有子路由，则换算子路由数据
    if (curr.children) {
      now.children = generateAccessRoutes(curr.children, parent[curr.url].childRoutes)
      delete now.childRoutes
    }
    // 将当前路由对象添加到结果数组中
    result.push(now)
    return result
  }, [])
}
